﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using MakeIT.MiraPark.Negocios;

namespace MiraPark
{
    public partial class FormCadastroOutraData : Form
    {
        private string operacao = "";

        public FormCadastroOutraData()
        {
            InitializeComponent();
        }

        private void FormCadastroOutraData_Load(object sender, EventArgs e)
        {
            //Popular a lista de outraDatas cadastrados
            this.dataGridViewOutrasDatas.DataSource = ModelBO.getOutraDatas();
            setupButtonsControls();
        }

        private void dataGridViewOutraData_SelectionChanged(object sender, EventArgs e)
        {
            setupButtonsControls();
        }

        private void buttonNovo_Click(object sender, EventArgs e)
        {
            this.operacao = "novo";
            setupButtonsControls();
        }

        private void buttonCancelar_Click(object sender, EventArgs e)
        {
            this.operacao = "cancelar";
            setupButtonsControls();
        }

        private void buttonEditar_Click(object sender, EventArgs e)
        {
            this.operacao = "editar";
            setupButtonsControls();
        }

        private void buttonExcluir_Click(object sender, EventArgs e)
        {
            this.operacao = "excluir";

            List<OutraDataVO> outraDataList = (List<OutraDataVO>)this.dataGridViewOutrasDatas.DataSource;
            OutraDataVO outraData = outraDataList[this.dataGridViewOutrasDatas.CurrentRow.Index];
            DialogResult dr = MessageBox.Show(this, "Confirma a exclusão desta outra data " + outraData.motivo, "Confirmação", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (dr.ToString().Equals("Yes"))
            {
                ModelBO.delOutraData(outraData);

                int nRow = this.dataGridViewOutrasDatas.CurrentRow.Index;
                this.dataGridViewOutrasDatas.DataSource = ModelBO.getOutraDatas();
                if (this.dataGridViewOutrasDatas.Rows.Count > 0)
                {
                    dataGridViewOutrasDatas.CurrentCell = dataGridViewOutrasDatas.Rows[Math.Min(nRow, this.dataGridViewOutrasDatas.Rows.Count - 1)].Cells[1];
                    dataGridViewOutrasDatas.Rows[Math.Min(nRow, this.dataGridViewOutrasDatas.Rows.Count - 1)].Selected = true;
                }

                setupButtonsControls();
            }
        }

        private void buttonSalvar_Click(object sender, EventArgs e)
        {
            String erros = "";
            if (this.dateTimePickerDataInicial.Value == null)
                erros = erros + "Data inicial deve ser informado.\r\n";
            if (this.dateTimePickerDataFinal.Value == null)
                erros = erros + "Data final deve ser informado.\r\n";
            if (this.textBoxMotivo.Text.Trim().Length == 0)
                erros = erros + "Motivo deve ser informado.\r\n";
            if(this.dateTimePickerDataInicial.Value != null && this.dateTimePickerDataFinal.Value != null &&
                this.dateTimePickerDataInicial.Value.Date > this.dateTimePickerDataFinal.Value.Date)
                erros = erros + "Data inicial MAIOR que data final.\r\n";
            if (this.dateTimePickerHoraInicial.Value > this.dateTimePickerHoraFinal.Value)
                erros = erros + "Hora inicial MAIOR que data final.\r\n";

            if (erros.Length > 0)
            {
                MessageBox.Show(this, erros, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            OutraDataVO outraData = null;

            if (this.operacao.Equals("novo"))
            {

                outraData = OutraDataVO.CreateOutraDataVO();
                outraData.outraDataInicial = this.dateTimePickerDataInicial.Value;
                outraData.outraDataFinal = this.dateTimePickerDataFinal.Value;
                outraData.horaInicial = this.dateTimePickerHoraInicial.Value.TimeOfDay;
                outraData.horaFinal = this.dateTimePickerHoraFinal.Value.TimeOfDay;
                outraData.motivo = this.textBoxMotivo.Text;

                outraData.idOutraData = (int)ModelBO.newOutraData(outraData);
            }
            if (this.operacao.Equals("editar"))
            {
                List<OutraDataVO> outraDataList = (List<OutraDataVO>)this.dataGridViewOutrasDatas.DataSource;
                outraData = outraDataList[this.dataGridViewOutrasDatas.CurrentRow.Index];

                outraData.outraDataInicial = this.dateTimePickerDataInicial.Value;
                outraData.outraDataFinal = this.dateTimePickerDataFinal.Value;
                outraData.horaInicial = this.dateTimePickerHoraInicial.Value.TimeOfDay;
                outraData.horaFinal = this.dateTimePickerHoraFinal.Value.TimeOfDay;
                outraData.motivo = this.textBoxMotivo.Text;

                ModelBO.setOutraData(outraData);
            }
            this.operacao = "salvar";

            List<OutraDataVO> listOutraDataVOs = ModelBO.getOutraDatas();
            dataGridViewOutrasDatas.DataSource = listOutraDataVOs;
            int nRow = listOutraDataVOs.FindIndex(a => a.idOutraData == outraData.idOutraData);
            dataGridViewOutrasDatas.CurrentCell = dataGridViewOutrasDatas.Rows[nRow].Cells[1];
            dataGridViewOutrasDatas.Rows[nRow].Selected = true;

            setupButtonsControls();
        }


        private void setupButtonsControls()
        {
            bool haRows = this.dataGridViewOutrasDatas.Rows.Count > 0 && this.dataGridViewOutrasDatas.CurrentRow!=null;
            bool novo = this.operacao.Equals("novo");
            bool edit = this.operacao.Equals("editar");
            bool canc = this.operacao.Equals("cancelar");

            this.buttonCancelar.Enabled = novo || edit;
            this.buttonNovo.Enabled = !novo && !edit;
            this.buttonEditar.Enabled = haRows && !novo && !edit;
            this.buttonExcluir.Enabled = haRows && !novo && !edit;
            this.buttonSalvar.Enabled = novo || edit;

            this.dateTimePickerDataInicial.Enabled = novo || edit;
            this.dateTimePickerDataFinal.Enabled = novo || edit;
            this.dateTimePickerHoraInicial.Enabled = novo || edit;
            this.dateTimePickerHoraFinal.Enabled = novo || edit;
            this.textBoxMotivo.Enabled = novo || edit;

            this.dataGridViewOutrasDatas.Enabled = !novo && !edit;

            if (!haRows || novo)
            {
                this.textBoxMotivo.Text = "";
            }
            else {
                List<OutraDataVO> outraDataList = (List<OutraDataVO>)this.dataGridViewOutrasDatas.DataSource;
                OutraDataVO outraData = outraDataList[this.dataGridViewOutrasDatas.CurrentRow.Index];
                this.dateTimePickerDataInicial.Value = outraData.outraDataInicial;
                this.dateTimePickerDataFinal.Value = outraData.outraDataFinal;
                this.textBoxMotivo.Text = outraData.motivo;
                this.dateTimePickerHoraInicial.Value = DateTime.Today.AddTicks(outraData.horaInicial.Ticks);
                this.dateTimePickerHoraFinal.Value = DateTime.Today.AddTicks(outraData.horaFinal.Ticks);
            }
            if (novo || edit){
                this.textBoxMotivo.Focus();
            }
        }

        private void buttonListagem_Click(object sender, EventArgs e)
        {
            FormReportOutraData formx = new FormReportOutraData();
            formx.MdiParent = this.MdiParent;
            formx.Show();
        }

     }
}
